/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.upc.proyecto.web;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import pe.edu.upc.proyecto.domain.Usuario;
import pe.edu.upc.proyecto.service.UsuarioService;

@Controller
@RequestMapping("/usuario/**")
public class UsuarioController {

    @Autowired
    UsuarioService service;

    @RequestMapping(value = "/usuario", method = RequestMethod.GET)
    public String newList(ModelMap modelMap) {
        modelMap.put("usuarios", service.obtenerUsuarios());
        return "usuario/usuarioList";
    }

    @RequestMapping(value = "/usuario/form", method = RequestMethod.GET)
    public String create(ModelMap modelMap) {
        Usuario usuario = new Usuario();
        modelMap.put("usuario", usuario);
        return "usuario/usuarioForm";
    }

    @RequestMapping(value = "/usuario/form", method = RequestMethod.POST)
    public String saveForm(@Valid Usuario usuario, BindingResult result,
            ModelMap modelMap) {
        if (usuario == null) {
            throw new IllegalArgumentException("Un usuario es requerido");
        }
        if (result.hasErrors()) {
            modelMap.addAttribute("usuario", usuario);
            return "usuario/usuarioForm";
        }
        service.grabarUsuario(usuario);
        return "redirect:/usuario";
    }

    @RequestMapping(value = "/usuario/{id}/form", method = RequestMethod.GET)
    public String show(@PathVariable("id") Long id, ModelMap modelMap) {
        if (id == null) {
            throw new IllegalArgumentException("An Identifier is required");
        }
        Usuario usuario = service.obtenerUsuario(String.valueOf(id));
        modelMap.put("usuario", usuario);
        return "usuario/usuarioForm";
    }

    @RequestMapping(value = "/usuario/{id}/form", method = RequestMethod.POST)
    public String update(@Valid Usuario usuario, BindingResult result,
            ModelMap modelMap) {
        if (usuario == null) {
            throw new IllegalArgumentException("Un usuario es requerido");
        }
        if (result.hasErrors()) {
            modelMap.addAttribute("usuario", usuario);
            return "usuario/usuarioForm";
        }
        service.grabarUsuario(usuario);
        return "redirect:/usuario";
    }

    @RequestMapping(value = "/usuario/{id}", method = RequestMethod.DELETE)
    public String delete(@PathVariable("id") Long id, ModelMap modelMap) {
        service.removerUsuario(String.valueOf(id));
        return "redirect:/usuario";
    }
}
